package com.Abstract抽象类;

public class abstract_Detail {  //400
    /**
     * 1. 抽象类不能被实例化，只能被继承  即：不能被new
     * 2.abstract class 类名{}
     * 3.抽象类可以有抽象方法，也可以没有抽象方法
     * 4.一旦有一个抽象方法，那么这个类就要定义为抽象类
     * 5.abstract只能修饰类和方法，不能修饰变量和其他；
     * 6.抽象类的本质还是类，可以有任意的成员变量和方法  比如：属性，方法，构造器，静态代码块等
     * 7.抽象方法不能有主体，即不能实现，只能让子类实现
     * 8.如果一个类继承了抽象类，那么这个类必须实现  抽象类 中的 所有抽象方法，除非这个类也要定义为 抽象 类
     *
     *9.抽象方法不能被private，final ，static 修饰，因为这些关键字都是和重写相违背的；
     * final abstract void say();  //final是不希望重写，abstract后重写不了
     * static abstract void say();  //static跟重写无关，不能跟abstract搭配
     * private abstract void say();  //private是私有的，子类无法重新写
     * abstract final class A{}    //abstract不能实例化，final不能继承，所以A类没用了
     *
     */
}
//8.如果一个类继承了抽象类，那么这个类必须实现  抽象类 中的 所有抽象方法，除非这个类也要定义为 抽象 类
 abstract class A{  // 抽象类
    public abstract void say();
}

abstract class B  extends A{   //除非这个类也要定义为 抽象 类

}

class C extends B{ //这个类必须实现  抽象类 中的 所有抽象方法
    @Override
    public void say() {  // 重写父类抽象方法
        System.out.println("say");
    }
}